多个域名访问部署在GitHub Pages上的同一网站博客

xuliyaoPro 过期程序员

通过多域名访问 GitHub Pages 同一网站博客,具有以下优点:

多域名优点

  1. 提升可用性:通过多个域名指向同一博客,即使主域名出现问题(如解析错误、被封禁等),用户仍可以通过其他域名访问,提高网站的可用性。
  2. 提升搜索引擎收录:多个域名可以增加网站在搜索引擎中的曝光率,尤其是当不同域名被不同搜索引擎收录时。
  3. 品牌个性化访问:设立博客网站品牌,让用户更容易记住访问,提升用户体验。
  4. 备份和迁移:在更换域名时,可以通过多域名配置实现无缝迁移,避免旧链接失效。

一、主/副域名指向同一个 GitHub Pages

1. 配置主域名 (www.chinapmcc.com) 指向 GitHub Pages

  • 步骤
    1. 在域名注册商(如阿里云、腾讯云)的 DNS 管理页面,添加以下 CNAME 记录
      主机记录:www
      记录类型:CNAME
      记录值:CustomDomain.github.io
      TTL:默认
    2. 在 GitHub 仓库的 Settings > Pages > Custom domain 中填写 www.chinapmcc.com,并勾选 Enforce HTTPS

2. 配置副域名 (chinapmcc.dpdns.org) 指向 GitHub Pages

  • 选项 1(推荐):CNAME 记录
    主机记录:chinapmcc
    记录类型:CNAME
    记录值:CustomDomain.github.io

  • 选项 2:A 记录(若不支持 CNAME)
    直接指向 GitHub 的 IP:
    主机记录:chinapmcc
    记录类型:A
    记录值:185.199.111.153

3. GitHub Pages 配置

  • 在仓库根目录添加 CNAME 文件(无后缀),内容为:
    www.chinapmcc.com

如果你部署的是自己的服务器,通过上述DNS管理配置即可实现域名的跳转,如果是用的GitHub部署则副域名访问会报404错误,接着往下看解决方案。
本方案通过页面规则进行跳转,不用创建两个仓库那么麻烦。


二、实现方案:部署在GitHub博客,通过页面规则实现跳转

  • 页面规则创建步骤
    1. 点击域名 → 规则 → 页面规则 → 创建页面规则
    2. URL (必需):www.chinapmcc.dpdns.org/*
    3. 选取设置 (必需):转发URL | 301-永久重定向
    4. 输入目标 URL (必需):https://www.chinapmcc.com/$1
    5. 点击保存和部署页面规则

三、为什么 DNS 设置无效,而页面规则有效?

(1) DNS 设置无效的原因

  • GitHub Pages 的限制
    GitHub Pages 要求 自定义域名必须通过 CNAME 文件显式绑定,否则会返回 404
    即使你的 DNS 将 chinapmcc.dpdns.org 正确解析到 GitHub 的 IP(或通过 CNAME 指向 www.chinapmcc.com),但 GitHub 会检查请求的域名是否在 CNAME 文件中:

    • 如果域名未绑定(如 chinapmcc.dpdns.org),直接拒绝访问。
    • 如果域名已绑定(如 www.chinapmcc.com),正常响应内容。
  • 代理状态(Proxy Status)的影响

    • 若 Cloudflare 的代理状态为 “仅 DNS”(灰色云)
      DNS 仅负责解析,流量直接到达 GitHub,但 GitHub 会因域名未绑定返回 404
    • 若代理状态为 “已代理”(橙色云)
      Cloudflare 会拦截流量并尝试缓存/处理,但 GitHub 可能因 HTTPS 证书不匹配或域名未授权仍返回错误。

(2) 页面规则有效的原因

页面规则是 Cloudflare 的 流量处理层,它在 DNS 解析之后生效,直接修改请求的响应行为:

  • 当访问 www.chinapmcc.dpdns.org 时:
    1. DNS 先解析到目标 IP(如 GitHub 的服务器)。
    2. 页面规则拦截请求,直接返回 301 跳转到 www.chinapmcc.com完全绕过 GitHub 的域名验证
    3. 用户浏览器收到跳转指令,地址栏变为 www.chinapmcc.com,此时 GitHub 会正常响应(因为主域名已绑定)。

(3) DNS 设置 VS 页面规则:优先级关系

  • DNS 解析
    是第一步,决定域名指向哪个 IP(如 chinapmcc.dpdns.org185.199.111.153)。
  • 页面规则
    在 DNS 解析之后生效,对匹配的请求进行重定向、缓存等操作。

执行顺序

1
用户请求 → DNS 解析 → Cloudflare 代理(若开启) → 页面规则 → 到达服务器

优先级

  • 页面规则优先于 DNS 解析结果。只要请求匹配页面规则,Cloudflare 会直接处理(如跳转),不会继续转发到 DNS 解析的目标 IP。

四、如何选择跳转方案?

场景 1:希望保留副域名地址栏(无跳转)

  • 条件:必须让 GitHub 接受 chinapmcc.dpdns.org 的请求。
  • 解决方案
    1. 在 GitHub 仓库的 CNAME 文件中添加 chinapmcc.dpdns.org(需删除原有 www.chinapmcc.com)。
    2. 在 Cloudflare 中:
      • 设置 chinapmcc.dpdns.orgA 记录 指向 GitHub Pages 的 IP。
      • 关闭代理(灰色云)。
    • 缺点:GitHub 只能绑定一个主域名,需牺牲 www.chinapmcc.com 的直接绑定。

场景 2:强制跳转到主域名(当前方案)

  • 推荐配置
    • DNS 设置:保持 chinapmcc.dpdns.org 的 CNAME 指向 www.chinapmcc.com(代理状态关闭)。
    • 页面规则:添加 www.chinapmcc.dpdns.org/*301 跳转到 https://www.chinapmcc.com/$1
  • 优点
    • 主域名正常绑定 GitHub,副域名通过跳转实现访问。
    • 无需修改 GitHub 的 CNAME 文件。

五、验证步骤(可选)

  1. 检查 DNS 解析

    1
    dig www.chinapmcc.dpdns.org +short
    • 应返回 www.chinapmcc.com 的 IP(如 GitHub 的 185.199.111.153)。
  2. 测试页面规则

    • 访问 http://www.chinapmcc.dpdns.org/test,应跳转到 https://www.chinapmcc.com/test
  3. 检查 GitHub 配置

    • 确保 CNAME 文件仅包含 www.chinapmcc.com

总结

  • DNS 设置无效:因 GitHub 对未授权域名返回 404,与 DNS 解析无关。
  • 页面规则有效:它直接拦截请求并跳转,绕过 GitHub 的验证。
  • 两者关系:页面规则在 DNS 之后处理请求,优先级更高。
  • 推荐方案保持当前页面规则跳转,这是最稳定的多域名访问方案。
  • 标题: 多个域名访问部署在GitHub Pages上的同一网站博客
  • 作者: xuliyaoPro
  • 创建于 : 2025-06-20 00:00:00
  • 更新于 : 2025-06-20 00:00:00
  • 链接: https://chinapmcc.com/2025/06/20/网站建设/多个域名访问部署在GitHub Pages上的同一网站博客/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论